8.1 登录注册接口
登录注册在我们的实际业务中是特别常见的东西,本节我们将从需求分析、需求实现等方面与您一起实现一个登录注册的业务流程。
在这之前,如果您还没有接触过前后端的接口开发,那么我们建议您先去了解一下前后端分离的处理流程、请求流程。
本节代码存放目录为 lesson23
分析及接口设计
我们以最简单的登录注册进行讲解,比如:通过输入用户名、密码进行注册,之后通过用户名及密码进行登录。
在这个需求中,我们使用两个接口实现逻辑,一个是注册接口、一个是登录接口。
接口设计如下:
接口名称 | 接口路径 | 参数 | 返回 | 请求方式 |
---|---|---|---|---|
注册接口 | /register | username、password | success | GET |
登录接口 | /login | username、password | success | GET |
我们设计两个接口,一个用于注册,一个用于实现登录。
两个接口均接收username
、password
,如果处理成功,那么将返回字符串success
。
请求方式我们都使用了GET
,正常来说,像这种提交类的接口,我们应该使用POST
会好一些,这里为了方便演示,我们暂时使用GET
。
业务实现
在GO
语言中,我们可以很轻松的使用原生的库就可以实现一个简单的接口服务器。
在上面的业务中,我们先使用本地存储实现,使用一个map
进行注册信息的存储。如下所示:
var (
userMap map[string]string
)
func init() {
userMap = make(map[string]string)
}
如上代码所示,我们定义了一个map
存储用户注册信息,其中key
为用户名,value
为用户密码。
在上面我们使用到了init()
,这里讲一下,init()
函数也就是初始化函数,在每个包中只能存在一个init()
,并且是不需要显式调用的,在我们启动程序时会自动调用。
接下来我们实现注册接口,如下代码所示:
func main() {
http.HandleFunc("/register", register)
http.ListenAndServe("127.0.0.1:8088", nil)
}
func register(rsp http.ResponseWriter, req *http.Request) {
username := req.URL.Query().Get("username")
password := req.URL.Query().Get("password")
_, ok := userMap[username]
if ok {
io.WriteString(rsp, "已经注册过了")
return
}
userMap[username] = password
io.WriteString(rsp, "success")
}
在上面的代码中,我们使用http.HandleFunc
定义了注册接口,使用http.ListenAndServe
启动了我们的接口服务器。
运行代码以后,我们就可以直接在浏览器请求接口:http://127.0.0.1:8088:/register?username=1&password=123456
。
请求成功后,浏览器显示了:success
,这就代表我们已经注册成功了。
我们再次请求一次,浏览器显示了已经注册过了
,按照我们的预期执行。
接下来我们需要实现登录接口,如下代码所示:
http.HandleFunc("/login", login)
func login(rsp http.ResponseWriter, req *http.Request) {
username := req.URL.Query().Get("username")
password := req.URL.Query().Get("password")
cachePassword, ok := userMap[username]
if !ok {
io.WriteString(rsp, "用户名未注册")
return
}
if cachePassword != password {
io.WriteString(rsp, "密码错误")
return
}
io.WriteString(rsp, "success")
}
程序运行以后,我们完成了登录、注册两个接口逻辑,这时候我们可以在浏览器输入:
注册:
http://127.0.0.1:8088:/register?username=1&password=123456
登录:
http://127.0.0.1:8088/login?username=1&password=123456
到此我们就完成了一个简单的登录注册示例,但是在实际的开发过程中,我们的注册信息肯定是需要存储起来的。
我们可以尝试使用MySQL
、文件
等方式进行存储,这一类的文章也比较多,我们可以去尝试一下,将userMap
换成对应的存储方式即可。
接口开发是我们一定需要掌握的,包括传统的HTTP
服务,以及当下比较流行的微服务等。
关于传统的Web
开发,可以看一下 malatd,这是一个轻量级的Web
框架,使用简单易上手。